package xfuzzy.xfhl.model.spec;

import xfuzzy.lang.Type;
import xfuzzy.lang.TypeFactory;
import xfuzzy.lang.Universe;


/**
 * Clase para crear un tipo de entrada. Esta clase utiliza la factor�a de tipos (TypeFactory) para crearlos.
 * Contiene variables globales que son los diferentes tipos de entrada.
 * @author Sergio Cala Cordero, Septiembre 2009, Herramienta XFHL
 *
 */
public class XfhlInputType {
	
	/**
	 * Funci�n de pertenencia de entrada: FREE TRIANGLES
	 */	
	public static final int FREE_TRIANGLES = 1;

	/**
	 * Funci�n de pertenencia de entrada: FREE SHOULDERED TRIANGLES
	 */	
	public static final int FREE_SHOULDERED_TRIANGLES = 2;

	/**
	 * Funci�n de pertenencia de entrada: FREE GAUSSIANS
	 */	
	public static final int FREE_GAUSSIANS = 3;

	/**
	 * Funci�n de pertenencia de entrada: TRIANGULAR FAMILY
	 */	
	public static final int TRIANGULAR_FAMILY = 4;

	/**
	 * Funci�n de pertenencia de entrada: SHOULDERED-TRIANGLES FAMILY
	 */	
	public static final int SHOULDERED_TRIANGLES_FAMILY = 5;

	/**
	 * Funci�n de pertenencia de entrada: B-SPLINES FAMILY
	 */	
	public static final int B_SPLINES_FAMILY = 6;


	/**
	 * Funci�n est�tica que crea un tipo de entrada
	 * @param type  Estilo del tipo de entrada.	 
	 * @param name  Nombre del tipo de entrada.
	 * @param u     Universo del tipo de entrada.
	 * @param mfs   N�mero de funciones de pertenencia.
	 * @return      el objeto de la case Type deseado.
	 */
	public static Type create(int type,String name,Universe u,int mfs)
	{
	     Type typeIn=new Type(name,u);
	     
	     switch (type) {
			case XfhlInputType.FREE_TRIANGLES:
				TypeFactory.createFreeTriangles(typeIn, mfs);
				break;
				
			case XfhlInputType.FREE_SHOULDERED_TRIANGLES:
				TypeFactory.createFreeShoulderedTriangles(typeIn, mfs);
				break;		
			case XfhlInputType.FREE_GAUSSIANS:
				TypeFactory.createFreeGaussians(typeIn, mfs);
				break;		
			case XfhlInputType.TRIANGULAR_FAMILY:
				TypeFactory.createTriangularFamily(typeIn, mfs);
				break;		
			case XfhlInputType.SHOULDERED_TRIANGLES_FAMILY:
				TypeFactory.createShoulderedTriangularFamily(typeIn, mfs);
				break;		
			case XfhlInputType.B_SPLINES_FAMILY:
				TypeFactory.createBsplinesFamily(typeIn, mfs);
				break;		
			default:
				break;
			}
	     
		return typeIn;
	}
	


}
